package com.qf.dao.impl;
import com.qf.dao.ParkDao;
import com.qf.entity.Park;
import com.qf.utils.DBUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class ParkDaoImpl implements ParkDao {
    /** 查询当前页的所有数据的集合
     * @param customerPhone  cuntomer表中用户的手机号（这个是查询条件1，可独立条件查询，可联同查询条件x一起进行查询）
     * @param parkPetName    park表中的宠物名（这个是查询条件2，可独立条件查询，可联同查询条件x一起进行查询）
     * @param parkStartTime  park表中的开始时间（这个是查询条件3，可独立条件查询，可联同查询条件x一起进行查询）
     * @param parkEndTime    park表中的结束时间 （这个是查询条件3，可独立条件查询，可联同查询条件x一起进行查询）
     * @param currentPageNo 当前页（前端传递的数据）：-------------用户所处的第x页
     * @param pageSize      页量（前端传递的数据）：--------------是限制每页显示多少条数据
     * @return List<Park> 存储每行寄养对象的集合parkList
     */
    @Override
    public List<Park> selectAllList(Integer status,Integer customerPhone, String parkPetName, String parkStartTime, String parkEndTime, Integer currentPageNo, Integer pageSize) {
        //用于接收查询出来的数据
        List<Park>  list  = null;
        Park park = new Park();
        try {
            //实例化集合，里面存储的数据都是：用于给自定义的sql语句的占位符：“?”，添加占位符的数据
            List<Object>  parmList  = new ArrayList<>();
            StringBuffer  sb  = new StringBuffer("SELECT p.park_id,p.park_pet_name,p.park_pet_type,p.park_startTime,p.park_endTime,p.park_remark,p.park_status,p.v_id,c.v_name,c.v_phone FROM park p INNER JOIN vip c on c.v_id=p.v_id WHERE 1=1");
            List<Park> parkList = null;
            if (customerPhone !=null && !"".equals(customerPhone)) {
                sb.append(" and c.v_phone= ? ");
                parmList.add(customerPhone);
            }
            if (status !=null && !"".equals(status)) {

                sb.append(" and p.park_status= ? ");
                parmList.add(status);
            }
            //用户根据宠物的名字，进行模糊查询
            if (parkPetName !=null  && !"".equals(parkPetName)){
                sb.append(" and  p.park_pet_name like ? ");
                parmList.add("%"+parkPetName+"%");
            }
            if (parkStartTime !=null && !"".equals(parkStartTime)) {
                sb.append("  and  p.park_startTime > ? ");
                parmList.add(parkStartTime);
            }
            if (parkEndTime !=null && !"".equals(parkEndTime) ) {
                sb.append(" and  p.park_endTime < ? ");
                parmList.add(parkEndTime);
            }
//sql语句拼接分页
            sb.append(" limit ?,?");
            parmList.add((currentPageNo-1)*pageSize);
            parmList.add(pageSize);
            String string = sb.toString();
            Object[] array = parmList.toArray();
            QueryRunner qr= DBUtils.DB.getQr();
            //这个方法，用于做查询，获取多行数据的结果集
            list = qr.query(string,new BeanListHandler<Park>(Park.class), array);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    @Override
    public int addPark(Park park) {
        int num  = 0;
        try {
            //自定义sql语句
            String sql ="insert into park(park_pet_name,park_pet_type,park_startTime,park_endTime,v_id,park_status,m_id)VALUES(?,?,?,?,?,?,?);";

            //获取前端页面，用户在去增加页面输入的数据
            String petName = park.getPark_pet_name();//获取宠物名
            String petType = park.getPark_pet_type();//获取宠物类型
            Date startTime = park.getPark_startTime();//获取寄养时间
            Date endTime = park.getPark_endTime();//获取寄养结束时间
            int cId = park.getV_id();//获取主人id
            int status = park.getPark_status();//获取宠物状态
            int monitorId = park.getM_id();//获取监控id

            Object [] objects={petName,petType,startTime,endTime,cId,status,monitorId};
            QueryRunner qr= DBUtils.DB.getQr();
            num = qr.update(sql, objects);

        } catch (SQLException e) {
            e.printStackTrace();
        }

        return num;
    }

}
